const app = getApp()
const { request } = require("../../utils/request")

Page({
  data: {
    activeTab: 'all',  // 默认选中全部
    phoneList: [],
    startDate: '',
    endDate: '',
    activeDateRange: '7', // 默认选中近7天
    showDatePicker: false,
    currentPickerType: '', // 'start' or 'end'
    maxDate: '',
    isDatePickerCollapsed: false, // 日期选择器折叠状态
    tempDate: '', // 新增：临时日期变量，用于实时显示选择的日期
    originalDate: '', // 新增：原始日期，用于取消恢复
    uploading: false, // 控制上传状态
    tabs: [
      { key: 'all', name: '全部' },
      { key: 'unused', name: '未使用' },
      { key: 'used', name: '已使用' }
    ]
  },

  onLoad() {
    // 设置最大日期为今天
    const today = new Date();
    this.setData({
      maxDate: this.formatDate(today)
    });
    
    this.initDates()
    this.fetchPhoneList()
  },

  // 初始化日期
  initDates() {
    const today = new Date()
    const sevenDaysAgo = new Date(today)
    sevenDaysAgo.setDate(today.getDate() - 7)
    
    this.setData({
      startDate: this.formatDate(sevenDaysAgo),
      endDate: this.formatDate(today)
    })
  },

  // 格式化日期 YYYY-MM-DD
  formatDate(date) {
    const year = date.getFullYear()
    const month = String(date.getMonth() + 1).padStart(2, '0')
    const day = String(date.getDate()).padStart(2, '0')
    return `${year}-${month}-${day}`
  },

  // 格式化日期为 YYYY-MM-DD HH:mm:ss
  formatDateTime(date, isEndDate = false) {
    // 月份需要+1，并且需要保证是2位数
    const month = date.getMonth() + 1;
    const monthStr = month < 10 ? '0' + month : month;
    
    // 日期需要保证是2位数
    const day = date.getDate();
    const dayStr = day < 10 ? '0' + day : day;
    
    if (isEndDate) {
      // 结束日期设置为当天 23:59:59
      return date.getFullYear()+'-'+monthStr+'-'+dayStr+' '+'23'+':'+'59'+':'+'59';
    } else {
      // 开始日期设置为当天 00:00:00
      return date.getFullYear()+'-'+monthStr+'-'+dayStr+' '+'00'+':'+'00'+':'+'00';
    }
  },

  // 将日期字符串转换为完整的日期时间格式
  formatDateRange(dateStr, isEndDate = false) {
    if (!dateStr) return '';
    const date = new Date(dateStr);
    return this.formatDateTime(date, isEndDate);
  },

  // 切换标签
  onTabChange(e) {
    const tab = e.currentTarget.dataset.tab
    this.setData({ activeTab: tab }, () => {
      this.fetchPhoneList()
    })
  },

  // 选择快捷日期范围
  onQuickDateSelect(e) {
    const days = e.currentTarget.dataset.days
    const today = new Date()
    const startDate = new Date(today)
    startDate.setDate(today.getDate() - parseInt(days))

    this.setData({
      activeDateRange: days,
      startDate: this.formatDate(startDate),
      endDate: this.formatDate(today)
    }, () => {
      this.fetchPhoneList()
    })
  },

  // 显示开始日期选择器
  showStartPicker(e) {
    this.setData({
      showDatePicker: true,
      currentPickerType: 'start',
      // 重要：初始化tempDate为当前已选的开始日期
      tempDate: this.data.startDate,
      // 保存原始日期，用于取消恢复
      originalDate: this.data.startDate
    });
  },
  
  // 显示结束日期选择器
  showEndPicker(e) {
    this.setData({
      showDatePicker: true,
      currentPickerType: 'end',
      // 重要：初始化tempDate为当前已选的结束日期
      tempDate: this.data.endDate,
      // 保存原始日期，用于取消恢复
      originalDate: this.data.endDate
    });
  },
  
  // 日期选择器变化 - 立即更新tempDate和上方显示
  onDatePickerChange(e) {
    const date = e.detail.value;
    console.log('选择的日期:', date);
    
    // 立即更新临时日期显示
    this.setData({
      tempDate: date
    });
    
    // 实时更新上方日期显示，但不触发请求
    if (this.data.currentPickerType === 'start') {
      this.setData({
        startDate: date
      });
    } else {
      this.setData({
        endDate: date
      });
    }
  },
  
  // 确认选择日期
  onPickerConfirm() {
    console.log('确认选择，当前tempDate:', this.data.tempDate);
    
    if (this.data.tempDate) {
      this.setData({
        activeDateRange: 'custom',
        showDatePicker: false
      }, () => {
        this.fetchPhoneList();
      });
    } else {
      this.setData({ 
        showDatePicker: false 
      });
    }
  },
  
  // 关闭日期选择器 (取消)
  closeDatePicker() {
    // 恢复为原始日期
    if (this.data.currentPickerType === 'start') {
      this.setData({
        startDate: this.data.originalDate || this.data.startDate,
        showDatePicker: false
      });
    } else {
      this.setData({
        endDate: this.data.originalDate || this.data.endDate,
        showDatePicker: false
      });
    }
  },

  // 阻止冒泡，避免点击选择器内容时关闭
  stopPropagation() {
    return;
  },

  // 切换日期选择器的折叠状态
  toggleDatePicker() {
    this.setData({
      isDatePickerCollapsed: !this.data.isDatePickerCollapsed
    });
  },

  // 获取手机号列表
  fetchPhoneList() {
    const { activeTab, startDate, endDate } = this.data;
    let isUsed = null;
    
    // 根据activeTab设置isUsed值
    if (activeTab === 'unused') {
      isUsed = 0; // 未使用
    } else if (activeTab === 'used') {
      isUsed = 1; // 已使用
    }

    wx.showLoading({ title: '加载中...' });

    // 构建请求数据，只在有值时添加属性
    const requestData = {};
    
    if (isUsed !== null) {
      requestData.isUsed = isUsed;
    }
    
    if (startDate) {
      requestData.startDate = this.formatDateRange(startDate);
    }
    
    if (endDate) {
      requestData.endDate = this.formatDateRange(endDate, true);
    }

    console.log('请求参数：', requestData); // 添加日志，方便调试

    request({
      url: `${app.globalData.baseUrl}/sadmin/particular-phone/getPhoneList`,
      method: 'POST', // 更改为POST请求
      data: requestData // 请求参数放入请求体中
    })
    .then(res => {
      if (res.data.code === 1) {
        this.setData({
          phoneList: res.data.data.map(item => ({
            ...item,
            statusText: item.isUsed === 0 ? '未使用' : '已使用'
          }))
        });
      } else {
        wx.showToast({
          title: res.data.msg || '获取数据失败',
          icon: 'none'
        });
      }
    })
    .catch(err => {
      console.error('获取手机号列表失败:', err);
      wx.showToast({
        title: '获取数据失败',
        icon: 'none'
      });
    })
    .finally(() => {
      wx.hideLoading();
    });
  },

  // 选择并上传文件
  chooseAndUploadFile() {
    if (this.data.uploading) {
      return; // 防止重复点击
    }
    
    // 显示加载提示
    this.setData({ uploading: true });
    
    wx.chooseMessageFile({
      count: 1, // 默认只能选择1个文件
      type: 'file', // 可以选择所有文件
      extension: ['xls', 'xlsx', 'csv'], // 限制文件类型
      success: (res) => {
        const tempFilePath = res.tempFiles[0].path;
        const fileName = res.tempFiles[0].name;
        
        wx.showLoading({
          title: '正在上传...',
          mask: true
        });
        
        // 上传文件到服务器
        wx.uploadFile({
          url: `${app.globalData.baseUrl}/sadmin/particular-phone/addPhones`,
          filePath: tempFilePath,
          name: 'file', // 服务器端接收文件的参数名
          formData: {
            // 可添加其他表单数据
            fileName: fileName
          },
          header: {
            'content-type': 'multipart/form-data',
            // 如果需要在header中传递token
            'sadmintoken': wx.getStorageSync('token') || ''
          },
          success: (uploadRes) => {
            console.log('上传响应', uploadRes);
            
            // 解析返回的JSON字符串
            let result;
            try {
              result = JSON.parse(uploadRes.data);
            } catch (e) {
              console.error('解析响应数据失败', e);
              wx.showToast({
                title: '上传失败，请重试',
                icon: 'none'
              });
              return;
            }
            
            // 根据返回结果提示用户
            if (result.code === 1) {
              // 成功情况
              wx.showToast({
                title: '上传成功',
                icon: 'success',
                duration: 2000
              });
              
              // 上传成功后，重置日期为近7天，并保持当前的isUsed值
              this.refreshAfterUpload();
            } else {
              // 失败情况，显示错误信息
              wx.showModal({
                title: '上传失败',
                content: result.msg || '服务器处理失败，请稍后重试',
                showCancel: false,
                confirmText: '确定'
              });
            }
          },
          fail: (err) => {
            console.error('上传失败', err);
            wx.showModal({
              title: '上传失败',
              content: '网络异常，请检查网络后重试',
              showCancel: false,
              confirmText: '确定'
            });
          },
          complete: () => {
            wx.hideLoading();
            this.setData({ uploading: false });
          }
        });
      },
      fail: (err) => {
        console.log('选择文件失败', err);
        this.setData({ uploading: false });
      }
    });
  },
  
  // 上传成功后刷新页面数据
  refreshAfterUpload() {
    // 重置为近7天
    const today = new Date();
    const sevenDaysAgo = new Date(today);
    sevenDaysAgo.setDate(today.getDate() - 7);
    
    this.setData({
      activeDateRange: '7',
      startDate: this.formatDate(sevenDaysAgo),
      endDate: this.formatDate(today)
    }, () => {
      // 刷新数据，保持当前isUsed参数
      this.fetchPhoneList();
    });
  }
})